`timescale 1ns / 1ps
//////////////////////////////////////////////////////////////////////////////////
// Company: 
// Engineer: 
// 
// Create Date:    14:12:06 11/23/2012 
// Design Name: 
// Module Name:    cont_serie 
// Project Name: 
// Target Devices: 
// Tool versions: 
// Description: 
//
// Dependencies: 
//
// Revision: 
// Revision 0.01 - File Created
// Additional Comments: 
//
//////////////////////////////////////////////////////////////////////////////////
module cont_serie(clk_i,rst_i,adre_a_o,adre_b_o,dato_o,rec_dataH_i,rec_readyH_i,ini_mem_i,cambia_turno_o,termina_mem_o,listo_leer_o,comienza_turno_i
    );
	 
	 input clk_i,rst_i,rec_readyH_i,ini_mem_i,comienza_turno_i;
	 output cambia_turno_o,termina_mem_o,listo_leer_o;
	 output [2:0] adre_a_o,adre_b_o;
	 output [1:0] dato_o;
	 input [7:0] rec_dataH_i;
	 
	 reg listo_leer_o = 0;
	 reg cambia_turno_o = 0;	
	 reg termina_mem_o = 0;
	 reg [2:0] adre_a_o = 0;
	 reg [2:0] adre_b_o = 0;
	 reg [1:0] dato_o = 0;
	 reg [3:0] cuenta_mem = 0;
	 
	 always @(posedge rec_readyH_i) begin
		if (ini_mem_i) begin
			cuenta_mem <= cuenta_mem+1;
		end
		if (cuenta_mem==9 && cambia_turno_o==1) begin
			cambia_turno_o <= 0;
			termina_mem_o <= 1;
			cuenta_mem <= 0;
		end
		else if (cuenta_mem==9) begin
			cambia_turno_o <= 1;
			cuenta_mem <= 0;
		end
		else if (!ini_mem_i) begin
			termina_mem_o <= 0;
		end
		if (comienza_turno_i) begin
			listo_leer_o <= 1;
		end
		else if (!comienza_turno_i) begin
			listo_leer_o <= 0;
		end
	 end
	 
	 always @(posedge clk_i) begin
		if (ini_mem_i) begin
			adre_a_o <= rec_dataH_i[7:5];
			adre_b_o <= rec_dataH_i[4:2];
			dato_o <= rec_dataH_i[1:0];
		end
		else if (listo_leer_o) begin
			adre_a_o <= rec_dataH_i[7:5];
			adre_b_o <= rec_dataH_i[4:2];
		end
		
	 end

endmodule
